Unified slash-command registry.
Every slash command is declared once as a SlashCommand entry in COMMANDS.
Bypass-tier frozensets and autocomplete entries are derived automatically — no
other file should hard-code command metadata.
All slash commands.
Commands that execute regardless of any busy state.
Commands that bypass only during initial server connection.
Commands that open modal UI immediately, deferring real work.
Argument forms of IMMEDIATE_UI commands that are still pure selector opens.
The bare-form check in _can_bypass_queue (value == cmd) parks every
argument form behind the queue because most of them act directly (e.g.
/model <name> switches models). Entries here are the exceptions: their
handler routes straight to a modal open and defers all real work (validation,
mutation) to the dismiss callback, exactly like the bare form. /auto model
with no further arguments qualifies — it only pushes the classifier-model
picker — while /auto model <spec> and /auto model clear validate and
mutate classifier state, so they stay queue-bound. Each entry must be an exact
lowered command-plus-subcommand string with single-space separators and no
further arguments; the bypass canonicalizes the submitted value's whitespace
before comparing against it.
Commands whose side effect fires immediately; chat output deferred until idle.
Commands that must wait in the queue when the app is busy.
Power-user commands kept out of autocomplete and help.
QUEUED-tier commands that must still run when startup has failed.
When the configured model can't be built (e.g. its provider package is
missing) the server never starts and the app holds a _server_startup_error
state that parks queued messages. These are the recovery escape hatches for
that state — install the missing package, reload config/env, or upgrade the
tool — so they must bypass the queue rather than sit behind the very failure
they repair. /model and /auth already escape via IMMEDIATE_UI (which
opens a modal and defers the real work); the commands here instead perform
their repair work directly, so they stay QUEUED and rely on this exemption.
The bypass itself is gated in _can_bypass_queue. Every entry is also
QUEUE_BOUND — the recovery exemption is orthogonal to the normal queue.
Union of all tiers plus hidden commands — used by drift tests.
Return autocomplete entries for slash commands.
Extract skill name and args from a /skill:<name> command.
Build autocomplete entries for discovered skills.
Each skill becomes a /skill:<name> entry with its description
and the skill name as a hidden keyword for fuzzy matching. Plugin skills
keep their namespaced machine name for matching/insertion but present a
short, source-tagged label in the popup.
Skills that already have a dedicated slash command in COMMANDS
(e.g., remember → /remember) are excluded to avoid duplicate
autocomplete entries.
Extended skill metadata for CLI display, adds source tracking.
Classification that controls whether a command can skip the message queue.
A single slash-command definition.
A single autocomplete entry for the slash-command controller.